package com.eshop.eshopmanagersystem.dal;

import com.eshop.eshopmanagersystem.idal.IUserDAL;
import com.eshop.eshopmanagersystem.model.UserInfo;
import com.eshop.eshopmanagersystem.unti.EncryptHelper;
import com.eshop.eshopmanagersystem.unti.Pager;
import com.eshop.eshopmanagersystem.unti.PagerData;
import com.eshop.eshopmanagersystem.unti.RandomPassHelper;
import org.apache.catalina.User;
import org.apache.ibatis.annotations.Delete;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 用户方法实现类
 */

@Service
public class UserDAL {

    @Autowired
    IUserDAL iuserdal;

    /**
     * 添加用户-由管理员添加
     *
     */
    public boolean addUser(UserInfo user){
        //密码加密
        user.setUser_password(EncryptHelper.SHA(user.getUser_password()));
        if(iuserdal.addUser(user)>0){
            return true;
        }else{
            return false;
        }
    }

    /**
     * 后台编辑用户信息
     */
    public boolean editUser(UserInfo user){
        if(iuserdal.editUser(user)>0){
            return true;
        }else{
            return false;
        }
    }

    /**
     * 更新用户密码
     */
    public boolean updateUserPass(UserInfo user){
        if(iuserdal.updateUserPass(user)>0){
            return true;
        }else{
            return false;
        }
    }

    /**
     * 修改密码
     * 先验证旧密码再更新
     */
    public boolean editUserPass(UserInfo user){
        //取旧密码验证
        user.setUser_password(user.getOldpass());
        if(validateUser(user)!=null){
            //验证成功更新密码
            //取新密码更新
            user.setUser_password(EncryptHelper.SHA(user.getNewpass()));
            return updateUserPass(user);
        }else{
            return false;
        }
    }

    /**
     * 用户登录-客户端登录方法
     */
    public UserInfo validateUser(UserInfo user){
        UserInfo userinfo =new UserInfo();
        userinfo.setUsername(user.getUsername());
        userinfo.setUser_password(EncryptHelper.SHA(user.getUser_password()));
        return iuserdal.validateUser(userinfo);
    }

    /**
     * 后台查看用户信息分页数据
     * 参数1：startIndex
     * 参数2:pageSize
     */
    private List<UserInfo> getUsersByPager(Pager pager){
        Integer currentPage = pager.getCurrentPage();
        Integer startIndex = (currentPage-1)*pager.getPageSize();
        pager.setStartIndex(startIndex);
        return iuserdal.getUsersByPager(pager);
    }

    /**
     * 后台查询用户分页数据封装方法
     * 返回 pageTotal
     */
    private Integer getPageTotal(Pager pager){
        Integer usersTotalNum = getUsersTotalNum();
        Integer pageTotal =1;
        //数据总条数除以pageSize，如果有余数也不能整除，页数+1
        //可以整除，页数=数据总条/pageSize
        pageTotal = usersTotalNum/pager.getPageSize();
        if(usersTotalNum%pager.getPageSize()>0){
            pageTotal = pageTotal+1;
        }
        return  pageTotal;
    }

    /**
     * 后台查询用户信息分页数据总数     *
     */
    private Integer getUsersTotalNum(){
        return iuserdal.getUsersTotalNum();
    }

    /**
     * 封装用户分页数据提供前端调用
     */
    public PagerData getUsersDataByPager(Pager pager){
        //调用工具栏存储分页数据信息
        PagerData pagerData = new PagerData();
        pagerData.setData(getUsersByPager(pager));
        pagerData.setPageTotal(getPageTotal(pager));
        return pagerData;
    }

    /********************** 带查询条件的分页方法 ***********************
     * 带条件查询的用户分页功能
     * @关键字 @username @startIndex @pageSize
     * 返回查询结果
     */
    private List<UserInfo> getUsersByPagerAndUserName(Pager pager){
        Integer currentPage = pager.getCurrentPage();
        Integer startIndex = (currentPage-1)*pager.getPageSize();
        pager.setStartIndex(startIndex);
        return iuserdal.getUsersByPagerAndUserName(pager);
    }

    /**
     * 带条件查询的用户分页数据总数
     * 关键字 @username
     */
    private Integer getUsersTotalNumByUserName(Pager pager){
        return iuserdal.getUsersTotalNumByUserName(pager);
    }

    /**
     * 带条件查询计算分页总数
     */
    private Integer getPageTotalByUserName(Pager pager){
        Integer usersTotalNumber = getUsersTotalNumByUserName(pager);
        Integer pageTotal = 1;
        //数据总条数除以pageSize，如果有余数也不能整除，页数+1
        //可以整除，页数=数据总条/pageSize
        pageTotal = usersTotalNumber/pager.getPageSize();
        if(usersTotalNumber%pager.getPageSize()>0){
            pageTotal = pageTotal + 1;
        }
        return pageTotal;
    }

    /**
     * 后台带条件查询的用户分页数据封装方法
     */
    public PagerData getUsersDataByPagerAndUserName(Pager pager){
        //调用封装的好方法进行数据装载
        PagerData pagerData = new PagerData();
        pagerData.setData(getUsersByPagerAndUserName(pager));
        pagerData.setPageTotal(getPageTotalByUserName(pager));
        return pagerData;
    }

    /**
     *  用户管理
     *  批量删除用户
     *  参数：id的集合
     */
    public boolean deleteUser(UserInfo userInfo){
        if(iuserdal.deleteUser(userInfo)>0){
            return true;
        }
        return false;
    }
}
